package com.hzsx.food;

import java.util.ArrayList;
import java.util.List;

public class KFC {

    // 食物的种类
    String[] names = { "薯条", "烧板", "鸡翅", "可乐" };

    // 生产的最大值，到达后可以休息
    static final int Max = 20;

    // 存放食物的集合
    List<Food> foods = new ArrayList<Food>();

    // 生产食物的方法
    public void prod(int index) {
        synchronized (this) {
            // 如果食物数量大于Max，生产者等待
            while (foods.size() >= Max) {
                System.out.println("食材够了，生产者等待...");
                try {
                    this.wait(); // 等待消费者消费食物
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            // 开始生产食物
            System.out.println("开始生产食物");
            for (int i = 0; i < index; i++) {
                Food food = new Food(names[(int) (Math.random() * 4)]);
                foods.add(food);
                System.out.println("生产了" + food.getName() + " 当前库存: " + foods.size());
            }

            // 唤醒消费者线程
            this.notifyAll();
        }
    }

    // 消费食物的方法
    public void consu(int index) {
        synchronized (this) {
            // 如果食物数量不足，消费者等待
            while (foods.size() < index) {
                System.out.println("食材不够了，消费者等待...");
                try {
                    this.wait(); // 等待生产者生产食物
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            // 开始消费食物
            System.out.println("开始消费");
            for (int i = 0; i < index; i++) {
                Food food = foods.remove(foods.size() - 1);
                System.out.println("消费了一个" + food.getName() + " 当前库存: " + foods.size());
            }

            // 唤醒生产者线程
            this.notifyAll();
        }
    }
}

